#!/bin/bash
# @Function
# cat lines colorfully. coat means *CO*lorful c*AT*.
#
# @Usage
#   $ echo -e 'Hello\nWorld' | coat
#   $ coat /path/to/file1
#   $ coat /path/to/file1 /path/to/file2
#
# @online-doc https://github.com/oldratlee/useful-scripts/blob/master/docs/shell.md#-coat
# @author Jerry Lee (oldratlee at gmail dot com)

set -e
set -o pipefail

# if not in console, use cat directly
#   check isatty in bash https://stackoverflow.com/questions/10022323
[ ! -t 1 ] && exec cat "$@"

# NOTE: $'foo' is the escape sequence syntax of bash
readonly ec=$'\033' # escape char
readonly eend=$'\033[0m' # escape end

readonly -a ECHO_COLORS=(33 35 36 31 32 37 34)
COUNT=0
colorEcho() {
    local color="${ECHO_COLORS[COUNT++ % ${#ECHO_COLORS[@]}]}"
    echo "$ec[1;${color}m$@$eend"
}

# Bash read line does not read leading spaces https://stackoverflow.com/questions/29689172
cat "$@" | while IFS= read -r line; do
    colorEcho "$line"
done
